home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / emula / arosdv19.lha / AROS / scripts / makefunctable.awk < prev    next >
Text File  |  1996-10-24  |  2KB  |  100 lines

  1. BEGIN {
  2.     maxlvo = 0;
  3.  
  4.     oname=tolower(lib) "_functable.c";
  5.  
  6.     print "/*" > oname;
  7.     print "        (C) 1995-96 AROS - The Amiga Replacement OS" >> oname
  8.     print "        *** Automatic generated file. Do not edit ***" >> oname
  9.     print "        Desc: Funktion table for " lib >> oname
  10.     print "        Lang: english" >> oname
  11.     print "*/" >> oname;
  12.     print "#ifndef AROS_LIBCALL_H\n#   include <aros/libcall.h>\n#endif" >> oname;
  13.     print "#ifndef NULL\n#define NULL ((void *)0)\n#endif\n" >> oname;
  14.  
  15.     f[1] = "open";
  16.     f[2] = "close";
  17.     f[3] = "expunge";
  18.     f[4] = "null";
  19.  
  20.     if (maxlvo < 4)
  21.     maxlvo = 4;
  22. }
  23. /^[ \t]*NAME[ \t]*(\*\/)?[ \t]*$/ {
  24.     while (getline > 0)
  25.     {
  26.         if (match($0,/^[ \t]*AROS_LH/))
  27.         {
  28.         line=$0;
  29.         sub(/[ \t]*$/,"",line);
  30.         if (match(line,/[a-zA-Z0-9_]+,$/))
  31.             name=substr(line,RSTART,RLENGTH-1);
  32.         break;
  33.         }
  34.         if (match ($0, /(\*\/|\*\/)/))
  35.         break;
  36.     }
  37.     }
  38. /^(\/\*)?[ \t]*LOCATION[ \t]*(\*\/)?[ \t]*$/ {
  39.     while (getline > 0)
  40.     {
  41.     if (match ($0, /[0-9]+,/))
  42.     {
  43.         lvo=int(substr($0,RSTART,RLENGTH-1));
  44.  
  45.         f[lvo] = name;
  46.         if (lvo > maxlvo)
  47.         maxlvo = lvo;
  48.  
  49.         break;
  50.     }
  51.  
  52.     if (match ($0, /(\*\/|\*\/)/))
  53.         break;
  54.     }
  55. }
  56. /^\/\*AROS/ {
  57.     if ($2 == "alias") {
  58.     a[lvo] = $3;
  59.     f[lvo] = $4;
  60.     }
  61. }
  62. END {
  63.     for (t=1; t<=maxlvo; t++)
  64.     {
  65.     if (t in f && !(t in a))
  66.         print "void AROS_SLIB_ENTRY(" f[t] "," lib ") (void);" >> oname;
  67.     }
  68.  
  69.     print "\nvoid *const " lib "_functable[]=\n{" >> oname;
  70.  
  71.     show=0;
  72.  
  73.     for (t=1; t<=maxlvo; t++)
  74.     {
  75.     line="    ";
  76.  
  77.     if (t in f)
  78.     {
  79.         line=line "AROS_SLIB_ENTRY(" f[t] "," lib "),";
  80.  
  81.         if (t in a)
  82.         line=line " /* " a[t] " " t " */";
  83.         else
  84.         line=line " /* " t " */";
  85.     }
  86.     else
  87.         line=line "NULL, /* " t " */";
  88.  
  89.     print line >> oname;
  90.  
  91.     show=0;
  92.     }
  93.  
  94.     print "    (void *)-1L" >> oname;
  95.     print "};" >> oname;
  96.  
  97.     print "\nchar " lib "_end;" >> oname;
  98. }
  99.  
  100.